#ifndef __SIGNAL_H__
#define __SIGNAL_H__
    
    #include "sys/types.h"

    typedef int sig_atomic_t;
    typedef unsigned int sigset_t;		/* 32 bits */

    #define _NSIG             32
    #define NSIG		_NSIG

    #define SIGHUP		 1
    #define SIGINT		 2
    #define SIGQUIT		 3
    #define SIGILL		 4
    #define SIGTRAP		 5
    #define SIGABRT		 6
    #define SIGIOT		 6
    #define SIGUNUSED	 7
    #define SIGFPE		 8
    #define SIGKILL		 9
    #define SIGUSR1		10
    #define SIGSEGV		11
    #define SIGUSR2		12
    #define SIGPIPE		13
    #define SIGALRM		14
    #define SIGTERM		15
    #define SIGSTKFLT	16
    #define SIGCHLD		17
    #define SIGCONT		18
    #define SIGSTOP		19
    #define SIGTSTP		20
    #define SIGTTIN		21
    #define SIGTTOU		22

    /* Ok,I haven't implemented sigactions,but trying to keep headers POSIX */
    #define SA_NOCLDSTOP	1
    #define SA_NOMASK	0x40000000
    #define SA_ONESHOT	0x80000000

    #define SIG_BLOCK          0	/* for blocking signals */
    #define SIG_UNBLOCK        1	/* for unblocking signals */
    #define SIG_SETMASK        2	/* for setting the signal mask */

    #define SIG_DFL		((void (*)(int))0)	/* default signal handling */
    #define SIG_IGN		((void (*)(int))1)	/* ignore signal */

    struct sigaction
    {
	    void (*sa_handler)(int);
	    sigset_t sa_mask;
	    int sa_flags;
	    void (*sa_restorer)(void);
    };

    void (*signal(int _sig,void (*_func)(int)))(int);
    int raise(int sig);
    int kill(pid_t pid,int sig);
    int sigaddset(sigset_t *mask,int signo);
    int sigdelset(sigset_t *mask,int signo);
    int sigemptyset(sigset_t *mask);
    int sigfillset(sigset_t *mask);
    int sigismember(sigset_t *mask,int signo); /* 1 - is,0 - not,-1 error */
    int sigpending(sigset_t *set);
    int sigprocmask(int how,sigset_t *set,sigset_t *oldset);
    int sigsuspend(sigset_t *sigmask);
    int sigaction(int sig,struct sigaction *act,struct sigaction *oldact);

#endif